package biolabs.core;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * {@code @Operation} marks methods that represent an <em>operation</em>
 * on an object. Operation can be performed on an object in the experiment
 * while the simulation is paused. Operation takes no simulation time.
 * It typically changes the internal state of the target object.
 *
 * <p>Operations are the means of user- or automated intervention in the
 * experiment. They can model actions such as injections or surgical
 * operations.</p>
 *
 * <p>An operation may fail to execute. In such case, it should throw
 * an exception and leave the target object unchanged.</p>
 *
 * @author Tomas Mikula
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Operation {

}
